package com.koi.common.anno;

import com.koi.common.constants.KoiCacheConstants;
import com.koi.common.enums.limit.LimitType;

import java.lang.annotation.*;

/**
 * @author ･ᴗ･
 * @description [KoiLimit限流注解]
 * 定义了两种限流类型，分别为全局限流和 IP 限流
 * 1、全局限流对访问接口的所有用户进行限流保护
 * 2、IP限流对每个IP请求用户进行单独限流保护
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface KoiLimit {

    /**
     * 限流key前缀
     */
    String prefix() default KoiCacheConstants.RATE_LIMIT_KEY;

    /**
     * 限流时间,单位秒
     */
    int time() default 3;

    /**
     * 限流次数
     */
    int count() default 18;

    /**
     * 限流类型(默认IP限流)
     */
    LimitType type() default LimitType.IP;
}
